#include "fractii.h"
fractie::fractie()
	{	
	(*this).x=0;
	(*this).y=0;
	}
fractie::fractie(int a,int b)
	{
	(*this).x=a;
	(*this).y=b;
	}
int fractie::getX()
	{
	return (*this).x;
	}
int fractie::getY()
	{
	return (*this).y;
  }
void fractie::setX(int b)
	{
	(*this).x=b;
	}
void fractie::setY(int b)
	{
	(*this).y=b;
  }
int fractie::cmmdc(int a,int b)
	{
  if(b>a)
  	{
    int t=a;
    a=b;
    b=t;
    }
    while(b!=0)
  	  {
 		   int m=a%b;
  		 a=b;
   		 b=m;
    	}
	return a;
	}
void fractie::simplifica()
	{
	int d=(*this).cmmdc(x,y);
	(*this).x=x/d;
	(*this).y=y/d;
	}
fractie fractie::operator+(fractie d)
	{
	int m=(*this).x*d.getY()+d.getX()*(*this).y;
	int n=(*this).y*d.getY();
	fractie rez=fractie(m,n);
	rez.simplifica();
	return rez;
	}
fractie fractie::operator-(fractie d)
  {
	int m=(*this).x*d.getY()-d.getX()*(*this).y;
	int n=(*this).y*d.getY();
	fractie rez=fractie(m,n);
	rez.simplifica();
	return rez;
	}
fractie fractie::operator*(fractie d)
	{
	int m=(*this).x*d.getX();
	int n=(*this).y*d.getY();
	fractie rez=fractie(m,n);
	rez.simplifica();
	return rez;
	}	
fractie fractie::operator/(fractie d)
	{
	int m=d.getY();
	int n=d.getX();
	fractie r=fractie(m,n);
	r.simplifica();
	int p=(*this).x*r.getX();
	int q=(*this).y*r.getY();
	fractie rez=fractie(p,q);
	rez.simplifica();
	return rez;
	}
void fractie::operator=(fractie d)
	{
	(*this).x=d.getX();
	(*this).y=d.getY();
	}
ostream& operator<<(ostream& cout,fractie D)
	{
	std::cout<<D.getX()<<"/"<<D.getY();
	return cout;
	}
bool fractie::operator<(fractie d)
	{
	float a,b;
	a=(*this).x/(*this).y;
	b=d.getX()/d.getY();
	if(a<b)
		return true;
		else
		return false;
	}
bool fractie::operator>(fractie d)
	{
	float a,b;
	a=(*this).x/(*this).y;
	b=d.getX()/d.getY();
	if(a>b)
		return true;
		else
		return false;
	}
sir::sir(int b)
	{
	(*this).setLung(b);
	for(int i=0;i<(*this).getLung();i++)
		{
		int a,b;
		std::cout<<"\n";
		std::cout<<"Introduceti numitorul fractiei nr "<<i<<" : ";std::cin>>a;		
		std::cout<<"Introduceti numitorul fractiei nr "<<i<<" : ";std::cin>>b;
		(*this).fr[i]=fractie(a,b);
		}
	}
void sir::setLung(int b)
	{
	(*this).n=b;
	}
int sir::getLung()
	{
	return (*this).n;
	}
fractie sir::suma()
	{
	fractie suma=fractie((*this).fr[0].getX(),(*this).fr[0].getY());
	for(int i=1;i<(*this).getLung();i++)
		suma=suma+(*this).fr[i];
	return suma;
	}
void sir::simplifica()
	{
	for(int i=0;i<(*this).getLung();i++)
		(*this).fr[i].simplifica();
	}
ostream& operator<<(ostream& cout,sir D)
	{
	for(int i=0;i<D.getLung();i++)
		std::cout<<D.fr[i]<<" ";
	return cout;
	}	
fractie sir::cmmrsup()
	{
	fractie max=fractie(-1,1);
	for(int i=0;i<(*this).getLung();i++)
		{
		if(((*this).fr[i].getX()<(*this).fr[i].getY()) && (*this).fr[i]>max)
			max=fr[i];
		}
	return max;
	}	
fractie sir::cmmcsub()
	{
	fractie min=fractie(500,1);
	for(int i=0;i<(*this).getLung();i++)
		{
		if(((*this).fr[i].getX()>(*this).fr[i].getY() )&& (*this).fr[i]<min)
			min=fr[i];
		}
	return min;
	}	
	
void sir::ordoneaza()
	{
	fractie aux=fractie();
	for(int i=0;i<(*this).getLung();i++)
		for(int j=0;j<(*this).getLung();j++)
			{
			if((*this).fr[i]>(*this).fr[j])
				{
				aux=(*this).fr[i];
				(*this).fr[i]=fr[j];
				(*this).fr[j]=aux;
				}
			}
	}


